#!/usr/bin/evn python3
# -*- coding: utf-8 -*-

import re
# time milliSecond
# 读取lrc歌词文件为结构化数据 [{startTime:,endTime:,en:,ch:},{}...]
# -1 作为endTime代表结束
# 注意因为歌词格式问题，无法获取最后一段的结束时间
def readlrc(filePath):
    with open(filePath,encoding='utf-8') as f:
        totalText = f.read()
    res = []
    items = {}
    parts = re.findall('\[.*\].+\n.+',totalText)
    for i,value in enumerate(parts):
        # 尝试获取时间
        isTime = re.search('\[(.*)\]',value)
        if(isTime == None):break
        startTime = dateTimeStrToStamp(isTime.groups()[0])
        # 确定了上一句的结束时间，看看有没有上一句
        if (len(res) != 0):
            # 结束时间填充
            items["endTime"]=startTime
        # 开始时间，英文段,中文段
        # 根据换行拆分中英文段
        enAndCh = value[isTime.span()[1]:].split("\n")
        items = {"startTime":startTime,"en":enAndCh[0],"ch":enAndCh[1]}
        #出入最终数据
        res.append(items)
    # 最后一句肯定没有结束时间，我们插入一个-1代表到头
    res[len(res)-1]["endTime"]=-1
    return res;

def toStandardLrc(array):
    res=[]
    for i,v in enumerate(array):
        # 时间需变为毫秒
        endTime = -1 if (i+1>=len(array)) else array[i+1]["start"]
        items = {"startTime":v["start"]*1000,"endTime":endTime*1000,"en":v["en"],"ch":v["cn"]}
        res.append(items)
    return res




#00: 00:01, 130 转为毫秒
def dateTimeStrToStamp(dateTimeStr):
    arr = re.split(':|\.', dateTimeStr)
    minute = int(arr[0].strip())
    second = int(arr[1].strip())
    milliSecond = int(arr[2].strip().ljust(3,'0'))
    if not (second==0):milliSecond+=second*1000
    if not (minute==0):milliSecond+=minute*1000*60
    return milliSecond
